//看了帖子后觉得有趣就实现了一把递归的约瑟夫算法
package test;
/**
* 500个小孩围成一圈,从第一个开始报数:1,2,3,1,2,3,1,2,3,……每次报3的小孩退出
问最后剩下的那个小孩,在以前500人里是第几个???
*/
public class Test {
/**
* 约瑟夫标准循环非递归解法
* @param n
* @param m
* @return
*/
public static int f2(int n, int m){
int index = 0;
for (int i = 2; i <= n; i++) {
index = (index + m) % i;
}
return index +1;
}
/**
* 约瑟夫递归算法
* @param n
* @param m
* @return 返回的结果+1 = 最终结果
*/
public static int f(int n,int m){
int t = 0;
if(n==1){
return t;
}else{
t = ( f(n-1, m) + m)%n;
}
return t;
}
public static void main(String[] args) {
//
int n = 500;
int m = 3;
//约瑟夫标准循环非递归解法
System.out.println(f2(n, m));//此方法来自帖子
/*
(函数)index表示(变量